package com.soup.common.module.sys.service;

import com.soup.common.entity.MenuTreeNode;
import com.soup.common.service.BaseService;
import com.soup.common.module.sys.data.MenuRequest;
import com.soup.common.module.sys.data.MenuResponse;
import com.soup.common.module.sys.entity.Menu;

import java.util.List;
import java.util.Map;

/**
 * 菜单服务
 *
 * @author zhaoyi
 * @date 2019-08-05 23:03
 * @since 1.0
 */
public interface MenuService extends BaseService<Menu> {

    /**
     * 获取登录用户的权限菜单列表
     *
     * @return 菜单列表
     */
    List<MenuResponse> getLoginUserMenus();

    /**
     * 获取权限树：所有菜单和菜单的功能，对于角色已经拥有的菜单进行check
     *
     * @param roleId 角色id
     * @return TreeNode
     */
    MenuTreeNode getPrivilegeTree(Integer roleId);

    /**
     * 查询角色的权限树
     * @param roleId 角色id
     * @return map，<tt>menuTree</tt>菜单树，<tt>roleTree</tt>角色树
     */
    Map<String, List<MenuTreeNode>> fetchRoleMenuTree(Integer roleId);

    /**
     * 设置角色的菜单功能权限
     *
     * @param roleId 角色id
     * @param menuIds 选中的菜单列表
     * @return 操作条数
     */
    int setUpRolePrivilege(Integer roleId, List<Integer> menuIds);

    /**
     * 新增菜单
     *
     * @param menuRequest 菜单请求参数
     * @return 操作条数
     */
    int add(MenuRequest menuRequest);

    /**
     * 修改菜单
     *
     * @param menuId 菜单id
     * @param menuRequest 菜单请求参数
     * @return 操作条数
     */
    int update(Integer menuId, MenuRequest menuRequest);

    /**
     * 查询所有菜单
     *
     * @param searchKeywords 查询关键字
     * @return 菜单列表
     */
    List<Menu> allMenus(String searchKeywords);

    /**
     * 删除菜单
     *
     * @param menuId 菜单id
     * @return 菜单列表
     */
    int del(Integer menuId);
}
